package org.yxt.springcloud.service;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.yxt.springcloud.entities.CommonResult;

/**
 * 使用feign作为HTTP请求客户端
 * openFeign的使用 支持spring MVC的@RequestMapping()的调用，相当于消费端需要调用微服务提供端的那个http接口，
 * 直接把想要的调用RPC接口定义即可
 * 注意 服务提供端的http接口地址不能出错
 * FeignClient(value = "调用服务提供的微服务在注册中心的注册地址 每个微服务的spring.application.name 的名称")
 *
 * @author Yang douya
 * @date 2021-01-02 23:25
 */
@Component
@FeignClient(value = "CLOUD-PAYMENT-SERVICE")
public interface PaymentOpenFeignService {

    /**
     * 调用支付查询数据 注意请求地址一定要补全完整
     * openFeign客户端会根据注解的@FeignClient(value = "") 的微服务名称，在注册中心获取到对应的地址和端口号，执行调用
     * 只需调用地址uri正确即可，方法名自定义
     *
     * @param id
     * @return
     */
    @GetMapping(value = "/payment/get/{id}")
    CommonResult getDateById(@PathVariable("id") Long id);


    /**
     * 使用openFeign客户端请求数据时候，默认1秒必须响应数据，超过1秒中，自动报错 read time out
     * 因为业务处理不一定都在1秒内，所以自行设定OpenFeign客户端的超时时间
     *
     * @return
     */
    @GetMapping(value = "/payment/feign/timeout")
    CommonResult feignTimeout();
}
